﻿#include <iostream>
#include <vector>
#include <string>
#include <algorithm>

using namespace std;
//
//struct Goods
//{
//	string _name;
//	double _price; // 价格
//	int _evaluate; // 评价
//
//	Goods(const char* str, double price, int evaluate)
//		:_name(str)
//		, _price(price)
//		, _evaluate(evaluate)
//	{}
//};
//struct ComparePriceLess
//{
//	bool operator()(const Goods& gl, const Goods& gr)
//	{
//		return gl._price < gr._price;
//	}
//};
//struct ComparePriceGreater
//{
//	bool operator()(const Goods& gl, const Goods& gr)
//	{
//		return gl._price > gr._price;
//	}
//};
//int main()
//{
//	vector<Goods> v = { { "苹果", 2.1, 5 }, { "香蕉", 3, 4 }, { "橙子", 2.2,
//   3 }, { "菠萝", 1.5, 4 } };
//
//	//sort(v.begin(), v.end(), ComparePriceLess());
//	//sort(v.begin(), v.end(), ComparePriceGreater());
//
//	// lambda 表达式
//	auto priceless = [](Goods& g1, Goods& g2)->bool {return g1._price < g2._price; };
//
//	sort(v.begin(), v.end(), priceless);
//
//	sort(v.begin(), v.end(), [](Goods&g1, Goods& g2)->bool{
//			return g1._evaluate > g2._evaluate;
//		});
//
//
//	return 0;
//}
//


//int main()
//{
//	int a = 1, b = 2, c = 3, d = 4;
//
//	auto fun1 = [&]()
//		{
//			a++;
//			b++;
//			c++;
//			d++;
//		};
//
//	fun1();
//
//	cout << a << b << c << d << endl;
//
//}


// 如果⼀个 lambda 表达式作为参数传递给⼀个函数，那这个函数可以使⽤这个 lambda 表达式捕获的变量吗 ?

template<typename Func>
void executeLambda(Func func) 
{
    func();
}

int main() 
{
    int x = 10;
    
    auto lambda = [x]() { std::cout << "Captured value: " << x << std::endl; };

    executeLambda(lambda);
    
    return 0;
}
